ಕನ್ನಡ

ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಇಟರೇಟರ್ ಪ್ರೊಟೊಕಾಲ್ ಅನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳಲು ಮತ್ತು ಕಾರ್ಯಗತಗೊಳಿಸಲು ಒಂದು ಸಮಗ್ರ ಮಾರ್ಗದರ್ಶಿ. ಇದು ವರ್ಧಿತ ಡೇಟಾ ನಿರ್ವಹಣೆಗಾಗಿ ಕಸ್ಟಮ್ ಇಟರೇಟರ್‌ಗಳನ್ನು ರಚಿಸಲು ನಿಮಗೆ ಸಹಾಯ ಮಾಡುತ್ತದೆ.

ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಇಟರೇಟರ್ ಪ್ರೊಟೊಕಾಲ್ ಮತ್ತು ಕಸ್ಟಮ್ ಇಟರೇಟರ್‌ಗಳ ಸರಳೀಕರಣ

ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್‌ನ ಇಟರೇಟರ್ ಪ್ರೊಟೊಕಾಲ್ ಡೇಟಾ ಸ್ಟ್ರಕ್ಚರ್‌ಗಳನ್ನು ಕ್ರಮಿಸಲು ಒಂದು ಪ್ರಮಾಣಿತ ಮಾರ್ಗವನ್ನು ಒದಗಿಸುತ್ತದೆ. ಈ ಪ್ರೊಟೊಕಾಲ್ ಅನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವುದರಿಂದ, ಡೆವಲಪರ್‌ಗಳು ಅರೇಗಳು ಮತ್ತು ಸ್ಟ್ರಿಂಗ್‌ಗಳಂತಹ ಅಂತರ್ನಿರ್ಮಿತ ಇಟರೇಬಲ್‌ಗಳೊಂದಿಗೆ ಸಮರ್ಥವಾಗಿ ಕೆಲಸ ಮಾಡಲು ಮತ್ತು ನಿರ್ದಿಷ್ಟ ಡೇಟಾ ಸ್ಟ್ರಕ್ಚರ್‌ಗಳು ಮತ್ತು ಅಪ್ಲಿಕೇಶನ್ ಅವಶ್ಯಕತೆಗಳಿಗೆ ಅನುಗುಣವಾಗಿ ತಮ್ಮದೇ ಆದ ಕಸ್ಟಮ್ ಇಟರೇಬಲ್‌ಗಳನ್ನು ರಚಿಸಲು ಸಾಧ್ಯವಾಗುತ್ತದೆ. ಈ ಮಾರ್ಗದರ್ಶಿ ಇಟರೇಟರ್ ಪ್ರೊಟೊಕಾಲ್ ಮತ್ತು ಕಸ್ಟಮ್ ಇಟರೇಟರ್‌ಗಳನ್ನು ಹೇಗೆ ಕಾರ್ಯಗತಗೊಳಿಸುವುದು ಎಂಬುದರ ಬಗ್ಗೆ ಸಮಗ್ರ ವಿವರಣೆಯನ್ನು ಒದಗಿಸುತ್ತದೆ.

ಇಟರೇಟರ್ ಪ್ರೊಟೊಕಾಲ್ ಎಂದರೇನು?

ಇಟರೇಟರ್ ಪ್ರೊಟೊಕಾಲ್ ಒಂದು ಆಬ್ಜೆಕ್ಟ್ ಅನ್ನು ಹೇಗೆ ಇಟರೇಟ್ ಮಾಡಬಹುದು, ಅಂದರೆ, ಅದರ ಅಂಶಗಳನ್ನು ಅನುಕ್ರಮವಾಗಿ ಹೇಗೆ ಪ್ರವೇಶಿಸಬಹುದು ಎಂಬುದನ್ನು ವ್ಯಾಖ್ಯಾನಿಸುತ್ತದೆ. ಇದು ಎರಡು ಭಾಗಗಳನ್ನು ಒಳಗೊಂಡಿದೆ: ಇಟರೇಬಲ್ ಪ್ರೊಟೊಕಾಲ್ ಮತ್ತು ಇಟರೇಟರ್ ಪ್ರೊಟೊಕಾಲ್.

ಇಟರೇಬಲ್ ಪ್ರೊಟೊಕಾಲ್

ಒಂದು ಆಬ್ಜೆಕ್ಟ್ Symbol.iterator ಕೀಲಿಯೊಂದಿಗೆ ಮೆಥಡ್ ಹೊಂದಿದ್ದರೆ ಅದನ್ನು ಇಟರೇಬಲ್ ಎಂದು ಪರಿಗಣಿಸಲಾಗುತ್ತದೆ. ಈ ಮೆಥಡ್ ಇಟರೇಟರ್ ಪ್ರೊಟೊಕಾಲ್‌ಗೆ ಅನುಗುಣವಾದ ಆಬ್ಜೆಕ್ಟ್ ಅನ್ನು ಹಿಂತಿರುಗಿಸಬೇಕು.

ಸಾರಾಂಶದಲ್ಲಿ, ಇಟರೇಬಲ್ ಆಬ್ಜೆಕ್ಟ್ ತನಗಾಗಿ ಒಂದು ಇಟರೇಟರ್ ಅನ್ನು ಹೇಗೆ ರಚಿಸಬೇಕೆಂದು ತಿಳಿದಿರುತ್ತದೆ.

ಇಟರೇಟರ್ ಪ್ರೊಟೊಕಾಲ್

ಇಟರೇಟರ್ ಪ್ರೊಟೊಕಾಲ್ ಒಂದು ಅನುಕ್ರಮದಿಂದ ಮೌಲ್ಯಗಳನ್ನು ಹೇಗೆ ಹಿಂಪಡೆಯುವುದು ಎಂಬುದನ್ನು ವ್ಯಾಖ್ಯಾನಿಸುತ್ತದೆ. ಒಂದು ಆಬ್ಜೆಕ್ಟ್ next() ಮೆಥಡ್ ಹೊಂದಿದ್ದರೆ ಅದನ್ನು ಇಟರೇಟರ್ ಎಂದು ಪರಿಗಣಿಸಲಾಗುತ್ತದೆ, ಮತ್ತು ಈ ಮೆಥಡ್ ಎರಡು ಪ್ರಾಪರ್ಟಿಗಳನ್ನು ಹೊಂದಿರುವ ಆಬ್ಜೆಕ್ಟ್ ಅನ್ನು ಹಿಂತಿರುಗಿಸುತ್ತದೆ:

next() ಮೆಥಡ್ ಇಟರೇಟರ್ ಪ್ರೊಟೊಕಾಲ್‌ನ ಪ್ರಮುಖ ಭಾಗವಾಗಿದೆ. next() ಗೆ ಪ್ರತಿ ಕರೆಯು ಇಟರೇಟರ್ ಅನ್ನು ಮುಂದಕ್ಕೆ ಸರಿಸುತ್ತದೆ ಮತ್ತು ಅನುಕ್ರಮದಲ್ಲಿನ ಮುಂದಿನ ಮೌಲ್ಯವನ್ನು ಹಿಂತಿರುಗಿಸುತ್ತದೆ. ಎಲ್ಲಾ ಮೌಲ್ಯಗಳನ್ನು ಹಿಂತಿರುಗಿಸಿದಾಗ, next() done ಅನ್ನು true ಗೆ ಹೊಂದಿಸಿ ಒಂದು ಆಬ್ಜೆಕ್ಟ್ ಅನ್ನು ಹಿಂತಿರುಗಿಸುತ್ತದೆ.

ಅಂತರ್ನಿರ್ಮಿತ ಇಟರೇಬಲ್‌ಗಳು

ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಹಲವಾರು ಅಂತರ್ನಿರ್ಮಿತ ಡೇಟಾ ಸ್ಟ್ರಕ್ಚರ್‌ಗಳನ್ನು ಒದಗಿಸುತ್ತದೆ, ಅವು ಸ್ವಾಭಾವಿಕವಾಗಿ ಇಟರೇಬಲ್ ಆಗಿರುತ್ತವೆ. ಇವುಗಳಲ್ಲಿ ಇವು ಸೇರಿವೆ:

ಈ ಇಟರೇಬಲ್‌ಗಳನ್ನು for...of ಲೂಪ್, ಸ್ಪ್ರೆಡ್ ಸಿಂಟ್ಯಾಕ್ಸ್ (...), ಮತ್ತು ಇಟರೇಟರ್ ಪ್ರೊಟೊಕಾಲ್ ಅನ್ನು ಅವಲಂಬಿಸಿರುವ ಇತರ ರಚನೆಗಳೊಂದಿಗೆ ನೇರವಾಗಿ ಬಳಸಬಹುದು.

ಅರೇಗಳೊಂದಿಗೆ ಉದಾಹರಣೆ:


const myArray = ["apple", "banana", "cherry"];

for (const item of myArray) {
  console.log(item); // Output: apple, banana, cherry
}

ಸ್ಟ್ರಿಂಗ್‌ಗಳೊಂದಿಗೆ ಉದಾಹರಣೆ:


const myString = "Hello";

for (const char of myString) {
  console.log(char); // Output: H, e, l, l, o
}

for...of ಲೂಪ್

for...of ಲೂಪ್ ಇಟರೇಬಲ್ ಆಬ್ಜೆಕ್ಟ್‌ಗಳನ್ನು ಇಟರೇಟ್ ಮಾಡಲು ಒಂದು ಶಕ್ತಿಯುತ ರಚನೆಯಾಗಿದೆ. ಇದು ಇಟರೇಟರ್ ಪ್ರೊಟೊಕಾಲ್‌ನ ಸಂಕೀರ್ಣತೆಗಳನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ನಿರ್ವಹಿಸುತ್ತದೆ, ಇದರಿಂದಾಗಿ ಅನುಕ್ರಮದಲ್ಲಿನ ಮೌಲ್ಯಗಳನ್ನು ಪ್ರವೇಶಿಸುವುದು ಸುಲಭವಾಗುತ್ತದೆ.

for...of ಲೂಪ್‌ನ ಸಿಂಟ್ಯಾಕ್ಸ್ ಹೀಗಿದೆ:


for (const element of iterable) {
  // ಪ್ರತಿ ಎಲಿಮೆಂಟ್‌ಗಾಗಿ ಕಾರ್ಯಗತಗೊಳಿಸಬೇಕಾದ ಕೋಡ್
}

for...of ಲೂಪ್ ಇಟರೇಬಲ್ ಆಬ್ಜೆಕ್ಟ್‌ನಿಂದ ಇಟರೇಟರ್ ಅನ್ನು (Symbol.iterator ಬಳಸಿ) ಹಿಂಪಡೆಯುತ್ತದೆ, ಮತ್ತು ಇಟರೇಟರ್‌ನ next() ಮೆಥಡ್ ಅನ್ನು done true ಆಗುವವರೆಗೆ ಪದೇ ಪದೇ ಕರೆಯುತ್ತದೆ. ಪ್ರತಿ ಇಟರೇಶನ್‌ನಲ್ಲಿ, next() ನಿಂದ ಹಿಂತಿರುಗಿದ value ಪ್ರಾಪರ್ಟಿಯನ್ನು element ವೇರಿಯಬಲ್‌ಗೆ ನಿಗದಿಪಡಿಸಲಾಗುತ್ತದೆ.

ಕಸ್ಟಮ್ ಇಟರೇಟರ್‌ಗಳನ್ನು ರಚಿಸುವುದು

ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಅಂತರ್ನಿರ್ಮಿತ ಇಟರೇಬಲ್‌ಗಳನ್ನು ಒದಗಿಸುತ್ತದೆಯಾದರೂ, ಇಟರೇಟರ್ ಪ್ರೊಟೊಕಾಲ್‌ನ ನಿಜವಾದ ಶಕ್ತಿ ನಿಮ್ಮ ಸ್ವಂತ ಡೇಟಾ ಸ್ಟ್ರಕ್ಚರ್‌ಗಳಿಗಾಗಿ ಕಸ್ಟಮ್ ಇಟರೇಟರ್‌ಗಳನ್ನು ವ್ಯಾಖ್ಯಾನಿಸುವ ಸಾಮರ್ಥ್ಯದಲ್ಲಿದೆ. ಇದು ನಿಮ್ಮ ಡೇಟಾವನ್ನು ಹೇಗೆ ಕ್ರಮಿಸಬೇಕು ಮತ್ತು ಪ್ರವೇಶಿಸಬೇಕು ಎಂಬುದನ್ನು ನಿಯಂತ್ರಿಸಲು ನಿಮಗೆ ಅನುಮತಿಸುತ್ತದೆ.

ಕಸ್ಟಮ್ ಇಟರೇಟರ್ ಅನ್ನು ಹೇಗೆ ರಚಿಸುವುದು ಎಂಬುದು ಇಲ್ಲಿದೆ:

  1. ನಿಮ್ಮ ಕಸ್ಟಮ್ ಡೇಟಾ ಸ್ಟ್ರಕ್ಚರ್ ಅನ್ನು ಪ್ರತಿನಿಧಿಸುವ ಕ್ಲಾಸ್ ಅಥವಾ ಆಬ್ಜೆಕ್ಟ್ ಅನ್ನು ವ್ಯಾಖ್ಯಾನಿಸಿ.
  2. ನಿಮ್ಮ ಕ್ಲಾಸ್ ಅಥವಾ ಆಬ್ಜೆಕ್ಟ್‌ನಲ್ಲಿ Symbol.iterator ಮೆಥಡ್ ಅನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸಿ. ಈ ಮೆಥಡ್ ಒಂದು ಇಟರೇಟರ್ ಆಬ್ಜೆಕ್ಟ್ ಅನ್ನು ಹಿಂತಿರುಗಿಸಬೇಕು.
  3. ಇಟರೇಟರ್ ಆಬ್ಜೆಕ್ಟ್ value ಮತ್ತು done ಪ್ರಾಪರ್ಟಿಗಳೊಂದಿಗೆ ಆಬ್ಜೆಕ್ಟ್ ಅನ್ನು ಹಿಂತಿರುಗಿಸುವ next() ಮೆಥಡ್ ಅನ್ನು ಹೊಂದಿರಬೇಕು.

ಉದಾಹರಣೆ: ಸರಳ ಶ್ರೇಣಿಗಾಗಿ ಇಟರೇಟರ್ ರಚಿಸುವುದು

ಸಂಖ್ಯೆಗಳ ಶ್ರೇಣಿಯನ್ನು ಪ್ರತಿನಿಧಿಸುವ Range ಎಂಬ ಕ್ಲಾಸ್ ಅನ್ನು ರಚಿಸೋಣ. ಶ್ರೇಣಿಯಲ್ಲಿನ ಸಂಖ್ಯೆಗಳ ಮೇಲೆ ಇಟರೇಟ್ ಮಾಡಲು ನಾವು ಇಟರೇಟರ್ ಪ್ರೊಟೊಕಾಲ್ ಅನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸುತ್ತೇವೆ.


class Range {
  constructor(start, end) {
    this.start = start;
    this.end = end;
  }

  [Symbol.iterator]() {
    let currentValue = this.start;
    const that = this; // ಇಟರೇಟರ್ ಆಬ್ಜೆಕ್ಟ್ ಒಳಗೆ ಬಳಸಲು 'this' ಅನ್ನು ಸೆರೆಹಿಡಿಯಿರಿ

    return {
      next() {
        if (currentValue <= that.end) {
          return {
            value: currentValue++,
            done: false,
          };
        } else {
          return {
            value: undefined,
            done: true,
          };
        }
      },
    };
  }
}

const myRange = new Range(1, 5);

for (const number of myRange) {
  console.log(number); // Output: 1, 2, 3, 4, 5
}

ವಿವರಣೆ:

ಉದಾಹರಣೆ: ಲಿಂಕ್ಡ್ ಲಿಸ್ಟ್‌ಗಾಗಿ ಇಟರೇಟರ್ ರಚಿಸುವುದು

ಮತ್ತೊಂದು ಉದಾಹರಣೆಯನ್ನು ಪರಿಗಣಿಸೋಣ: ಲಿಂಕ್ಡ್ ಲಿಸ್ಟ್ ಡೇಟಾ ಸ್ಟ್ರಕ್ಚರ್‌ಗಾಗಿ ಇಟರೇಟರ್ ರಚಿಸುವುದು. ಲಿಂಕ್ಡ್ ಲಿಸ್ಟ್ ನೋಡ್‌ಗಳ ಅನುಕ್ರಮವಾಗಿದೆ, ಅಲ್ಲಿ ಪ್ರತಿ ನೋಡ್ ಒಂದು ಮೌಲ್ಯ ಮತ್ತು ಪಟ್ಟಿಯಲ್ಲಿನ ಮುಂದಿನ ನೋಡ್‌ಗೆ ಒಂದು ಉಲ್ಲೇಖವನ್ನು (ಪಾಯಿಂಟರ್) ಹೊಂದಿರುತ್ತದೆ. ಪಟ್ಟಿಯಲ್ಲಿನ ಕೊನೆಯ ನೋಡ್ null (ಅಥವಾ undefined) ಗೆ ಉಲ್ಲೇಖವನ್ನು ಹೊಂದಿರುತ್ತದೆ.


class LinkedListNode {
    constructor(value, next = null) {
        this.value = value;
        this.next = next;
    }
}

class LinkedList {
    constructor() {
        this.head = null;
    }

    append(value) {
        const newNode = new LinkedListNode(value);
        if (!this.head) {
            this.head = newNode;
            return;
        }

        let current = this.head;
        while (current.next) {
            current = current.next;
        }
        current.next = newNode;
    }

    [Symbol.iterator]() {
        let current = this.head;

        return {
            next() {
                if (current) {
                    const value = current.value;
                    current = current.next;
                    return {
                        value: value,
                        done: false
                    };
                } else {
                    return {
                        value: undefined,
                        done: true
                    };
                }
            }
        };
    }
}

// ಬಳಕೆಯ ಉದಾಹರಣೆ:
const myList = new LinkedList();
myList.append("London");
myList.append("Paris");
myList.append("Tokyo");

for (const city of myList) {
    console.log(city); // Output: London, Paris, Tokyo
}

ವಿವರಣೆ:

ಜನರೇಟರ್ ಫಂಕ್ಷನ್‌ಗಳು

ಜನರೇಟರ್ ಫಂಕ್ಷನ್‌ಗಳು ಇಟರೇಟರ್‌ಗಳನ್ನು ರಚಿಸಲು ಹೆಚ್ಚು ಸಂಕ್ಷಿಪ್ತ ಮತ್ತು ಸೊಗಸಾದ ಮಾರ್ಗವನ್ನು ಒದಗಿಸುತ್ತವೆ. ಅವು ಬೇಡಿಕೆಯ ಮೇರೆಗೆ ಮೌಲ್ಯಗಳನ್ನು ಉತ್ಪಾದಿಸಲು yield ಕೀವರ್ಡ್ ಅನ್ನು ಬಳಸುತ್ತವೆ.

ಜನರೇಟರ್ ಫಂಕ್ಷನ್ ಅನ್ನು function* ಸಿಂಟ್ಯಾಕ್ಸ್ ಬಳಸಿ ವ್ಯಾಖ್ಯಾನಿಸಲಾಗುತ್ತದೆ.

ಉದಾಹರಣೆ: ಜನರೇಟರ್ ಫಂಕ್ಷನ್ ಬಳಸಿ ಇಟರೇಟರ್ ರಚಿಸುವುದು

Range ಇಟರೇಟರ್ ಅನ್ನು ಜನರೇಟರ್ ಫಂಕ್ಷನ್ ಬಳಸಿ ಪುನಃ ಬರೆಯೋಣ:


class Range {
  constructor(start, end) {
    this.start = start;
    this.end = end;
  }

  *[Symbol.iterator]() {
    for (let i = this.start; i <= this.end; i++) {
      yield i;
    }
  }
}

const myRange = new Range(1, 5);

for (const number of myRange) {
  console.log(number); // Output: 1, 2, 3, 4, 5
}

ವಿವರಣೆ:

ಜನರೇಟರ್ ಫಂಕ್ಷನ್‌ಗಳು next() ಮೆಥಡ್ ಮತ್ತು done ಫ್ಲ್ಯಾಗ್ ಅನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ನಿರ್ವಹಿಸುವ ಮೂಲಕ ಇಟರೇಟರ್ ರಚನೆಯನ್ನು ಸರಳಗೊಳಿಸುತ್ತವೆ.

ಉದಾಹರಣೆ: ಫಿಬೊನಾಕಿ ಸರಣಿ ಜನರೇಟರ್

ಜನರೇಟರ್ ಫಂಕ್ಷನ್‌ಗಳನ್ನು ಬಳಸುವುದಕ್ಕೆ ಮತ್ತೊಂದು ಉತ್ತಮ ಉದಾಹರಣೆಯೆಂದರೆ ಫಿಬೊನಾಕಿ ಸರಣಿಯನ್ನು ರಚಿಸುವುದು:


function* fibonacciSequence() {
  let a = 0;
  let b = 1;

  while (true) {
    yield a;
    [a, b] = [b, a + b]; // ಏಕಕಾಲಿಕ ಅಪ್‌ಡೇಟ್‌ಗಾಗಿ ಡಿಸ್ಟ್ರಕ್ಚರಿಂಗ್ ಅಸೈನ್‌ಮೆಂಟ್
  }
}

const fibonacci = fibonacciSequence();

for (let i = 0; i < 10; i++) {
  console.log(fibonacci.next().value); // Output: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34
}

ವಿವರಣೆ:

ಇಟರೇಟರ್ ಪ್ರೊಟೊಕಾಲ್ ಬಳಸುವುದರ ಪ್ರಯೋಜನಗಳು

ಸುಧಾರಿತ ಇಟರೇಟರ್ ತಂತ್ರಗಳು

ಇಟರೇಟರ್‌ಗಳನ್ನು ಸಂಯೋಜಿಸುವುದು

ನೀವು ಹಲವಾರು ಇಟರೇಟರ್‌ಗಳನ್ನು ಒಂದೇ ಇಟರೇಟರ್ ಆಗಿ ಸಂಯೋಜಿಸಬಹುದು. ನೀವು ಹಲವಾರು ಮೂಲಗಳಿಂದ ಡೇಟಾವನ್ನು ಏಕೀಕೃತ ರೀತಿಯಲ್ಲಿ ಪ್ರಕ್ರಿಯೆಗೊಳಿಸಬೇಕಾದಾಗ ಇದು ಉಪಯುಕ್ತವಾಗಿದೆ.


function* combineIterators(...iterables) {
  for (const iterable of iterables) {
    for (const item of iterable) {
      yield item;
    }
  }
}

const array1 = [1, 2, 3];
const array2 = ["a", "b", "c"];
const string1 = "XYZ";

const combined = combineIterators(array1, array2, string1);

for (const value of combined) {
  console.log(value); // Output: 1, 2, 3, a, b, c, X, Y, Z
}

ಈ ಉದಾಹರಣೆಯಲ್ಲಿ, `combineIterators` ಫಂಕ್ಷನ್ ಯಾವುದೇ ಸಂಖ್ಯೆಯ ಇಟರೇಬಲ್‌ಗಳನ್ನು ಆರ್ಗ್ಯುಮೆಂಟ್‌ಗಳಾಗಿ ತೆಗೆದುಕೊಳ್ಳುತ್ತದೆ. ಇದು ಪ್ರತಿ ಇಟರೇಬಲ್‌ನ ಮೇಲೆ ಇಟರೇಟ್ ಮಾಡುತ್ತದೆ ಮತ್ತು ಪ್ರತಿ ಐಟಂ ಅನ್ನು ಯೀಲ್ಡ್ ಮಾಡುತ್ತದೆ. ಇದರ ಫಲಿತಾಂಶವು ಎಲ್ಲಾ ಇನ್‌ಪುಟ್ ಇಟರೇಬಲ್‌ಗಳಿಂದ ಎಲ್ಲಾ ಮೌಲ್ಯಗಳನ್ನು ಉತ್ಪಾದಿಸುವ ಒಂದೇ ಇಟರೇಟರ್ ಆಗಿದೆ.

ಇಟರೇಟರ್‌ಗಳನ್ನು ಫಿಲ್ಟರ್ ಮತ್ತು ಟ್ರಾನ್ಸ್‌ಫಾರ್ಮ್ ಮಾಡುವುದು

ಮತ್ತೊಂದು ಇಟರೇಟರ್‌ನಿಂದ ಉತ್ಪಾದಿಸಲಾದ ಮೌಲ್ಯಗಳನ್ನು ಫಿಲ್ಟರ್ ಮಾಡುವ ಅಥವಾ ಪರಿವರ್ತಿಸುವ ಇಟರೇಟರ್‌ಗಳನ್ನು ಸಹ ನೀವು ರಚಿಸಬಹುದು. ಇದು ಡೇಟಾವನ್ನು ಪೈಪ್‌ಲೈನ್‌ನಲ್ಲಿ ಪ್ರಕ್ರಿಯೆಗೊಳಿಸಲು ನಿಮಗೆ ಅನುಮತಿಸುತ್ತದೆ, ಪ್ರತಿ ಮೌಲ್ಯವು ಉತ್ಪಾದನೆಯಾದಂತೆ ಅದಕ್ಕೆ ವಿಭಿನ್ನ ಕಾರ್ಯಾಚರಣೆಗಳನ್ನು ಅನ್ವಯಿಸುತ್ತದೆ.


function* filterIterator(iterable, predicate) {
  for (const item of iterable) {
    if (predicate(item)) {
      yield item;
    }
  }
}

function* mapIterator(iterable, transform) {
  for (const item of iterable) {
    yield transform(item);
    }
}

const numbers = [1, 2, 3, 4, 5, 6];

const evenNumbers = filterIterator(numbers, (x) => x % 2 === 0);
const squaredEvenNumbers = mapIterator(evenNumbers, (x) => x * x);

for (const value of squaredEvenNumbers) {
    console.log(value); // Output: 4, 16, 36
}

ಇಲ್ಲಿ, `filterIterator` ಒಂದು ಇಟರೇಬಲ್ ಮತ್ತು ಒಂದು ಪ್ರೆಡಿಕೇಟ್ ಫಂಕ್ಷನ್ ಅನ್ನು ತೆಗೆದುಕೊಳ್ಳುತ್ತದೆ. ಪ್ರೆಡಿಕೇಟ್ `true` ಅನ್ನು ಹಿಂತಿರುಗಿಸುವ ಐಟಂಗಳನ್ನು ಮಾತ್ರ ಇದು ಯೀಲ್ಡ್ ಮಾಡುತ್ತದೆ. `mapIterator` ಒಂದು ಇಟರೇಬಲ್ ಮತ್ತು ಒಂದು ಟ್ರಾನ್ಸ್‌ಫಾರ್ಮ್ ಫಂಕ್ಷನ್ ಅನ್ನು ತೆಗೆದುಕೊಳ್ಳುತ್ತದೆ. ಇದು ಪ್ರತಿ ಐಟಂಗೆ ಟ್ರಾನ್ಸ್‌ಫಾರ್ಮ್ ಫಂಕ್ಷನ್ ಅನ್ನು ಅನ್ವಯಿಸಿದ ಫಲಿತಾಂಶವನ್ನು ಯೀಲ್ಡ್ ಮಾಡುತ್ತದೆ.

ನೈಜ-ಪ್ರಪಂಚದ ಅಪ್ಲಿಕೇಶನ್‌ಗಳು

ಇಟರೇಟರ್ ಪ್ರೊಟೊಕಾಲ್ ಅನ್ನು ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಲೈಬ್ರರಿಗಳು ಮತ್ತು ಫ್ರೇಮ್‌ವರ್ಕ್‌ಗಳಲ್ಲಿ ವ್ಯಾಪಕವಾಗಿ ಬಳಸಲಾಗುತ್ತದೆ, ಮತ್ತು ಇದು ವಿವಿಧ ನೈಜ-ಪ್ರಪಂಚದ ಅಪ್ಲಿಕೇಶನ್‌ಗಳಲ್ಲಿ, ವಿಶೇಷವಾಗಿ ದೊಡ್ಡ ಡೇಟಾಸೆಟ್‌ಗಳು ಅಥವಾ ಅಸಿಂಕ್ರೋನಸ್ ಕಾರ್ಯಾಚರಣೆಗಳೊಂದಿಗೆ ವ್ಯವಹರಿಸುವಾಗ ಮೌಲ್ಯಯುತವಾಗಿದೆ.

ಉತ್ತಮ ಅಭ್ಯಾಸಗಳು

ತೀರ್ಮಾನ

ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಇಟರೇಟರ್ ಪ್ರೊಟೊಕಾಲ್ ಡೇಟಾ ಸ್ಟ್ರಕ್ಚರ್‌ಗಳನ್ನು ಕ್ರಮಿಸಲು ಶಕ್ತಿಯುತ ಮತ್ತು ನಮ್ಯವಾದ ಮಾರ್ಗವನ್ನು ಒದಗಿಸುತ್ತದೆ. ಇಟರೇಬಲ್ ಮತ್ತು ಇಟರೇಟರ್ ಪ್ರೊಟೊಕಾಲ್‌ಗಳನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವ ಮೂಲಕ, ಮತ್ತು ಜನರೇಟರ್ ಫಂಕ್ಷನ್‌ಗಳನ್ನು ಬಳಸಿಕೊಳ್ಳುವ ಮೂಲಕ, ನಿಮ್ಮ ನಿರ್ದಿಷ್ಟ ಅಗತ್ಯಗಳಿಗೆ ಅನುಗುಣವಾಗಿ ನೀವು ಕಸ್ಟಮ್ ಇಟರೇಟರ್‌ಗಳನ್ನು ರಚಿಸಬಹುದು. ಇದು ನಿಮಗೆ ಡೇಟಾದೊಂದಿಗೆ ದಕ್ಷವಾಗಿ ಕೆಲಸ ಮಾಡಲು, ಕೋಡ್ ಓದುವಿಕೆಯನ್ನು ಸುಧಾರಿಸಲು ಮತ್ತು ನಿಮ್ಮ ಅಪ್ಲಿಕೇಶನ್‌ಗಳ ಕಾರ್ಯಕ್ಷಮತೆಯನ್ನು ಹೆಚ್ಚಿಸಲು ಅನುವು ಮಾಡಿಕೊಡುತ್ತದೆ. ಇಟರೇಟರ್‌ಗಳನ್ನು ಕರಗತ ಮಾಡಿಕೊಳ್ಳುವುದು ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್‌ನ ಸಾಮರ್ಥ್ಯಗಳ ಬಗ್ಗೆ ಆಳವಾದ ತಿಳುವಳಿಕೆಯನ್ನು ನೀಡುತ್ತದೆ ಮತ್ತು ಹೆಚ್ಚು ಸೊಗಸಾದ ಮತ್ತು ದಕ್ಷ ಕೋಡ್ ಬರೆಯಲು ನಿಮಗೆ ಅಧಿಕಾರ ನೀಡುತ್ತದೆ.